Các kiểu trình biên dịch Trình_biên_dịch

Trình biên dịch cùng bản và trình biên dịch chéo bản

Tất cả các trình biên dịch đều hoặc là biên dịch cùng bản hoặc là biên dịch chéo bản.

Một trình biên dịch có thể sản xuất ra mã chủ định để chạy trên cùng một kiểu máy tính và một kiểu hệ điều hành như là chạy trên máy mà trình biên dịch tự nó tiến hành được gọi là một trình biên dịch cùng bản.

Một loại khác, trình biên dịch có thể sản xuất ra mã mà được thiết kế để chạy trên các kiểu máy tính khác hay hệ điều hành khác. Trường hợp này gọi là trình biên dịch chéo bản. Các trình biên dịch chéo bản thì rất có ích khi gặp một hệ thống phần cứng mới trong lần đầu tiên. Trình biên dịch chéo bản cũng rất cần khi việc phát triển phần mềm cho các hệ thống vi điều khiển, mà chúng chỉ có vừa đủ kho lưu trữ cho mã máy cuối, không đủ để tải trình biên dịch. (như trường hợp dịch chương trình để chạy trên các palmtop và các điện thoại di động chẳng hạn).

Số bước chuyển dịch

Tất cả các trình biên dịch thì có thể là một bước hay nhiều bước

  • Trình biên dịch một bước: Với loại này, sự chuyển dịch hoàn tất trong một bước và do đó rất nhanh.
Ví dụ của các trình biên dịch trước đây cho Pascal hay Borland C là trình biên dịch một bước.
  • Các trình biên dịch cần nhiều hơn một bước để hoàn tất gọi là trình biên dịch nhiều bước. Các kiểu trình biên dịch nhiều bước bao gồm:
  • Trình biên dịch nguồn sang nguồn là loại trình biên dịch nhận vào mã nguồn là một ngôn ngữ cấp cao và chuyển dịch thành một ngôn ngữ cấp cao khác.
Ví dụ: Một trình biên dịch tự động song song hoá sẽ thường xuyên lấy chương trình trong ngôn ngữ cấp cao ở ngõ vào và chuyển dạng mã nguồn và chú giải nó với các chú giải mã song song (như OpenMP hay cấu trúc ngôn ngữ (như các câu lệnh DOALL của Fortran)).
  • Trình biên dịch phân đoạn biên dịch sang ngôn ngữ ASM của một máy lý thuyết như là vài tiến hành của Prolog. Loại máy Prolog này còn được gọi là máy trừu tượng Warren (hay WAM).
Ví dụ: Các trình biên dịch bytecode cho Java, Python và nhiều trình biên dịch khác nữa là một kiểu con của kiểu này.
  • Trình biên dịch động hay còn gọi là trình biên dịch JIT sẽ chuyển dịch các ứng dụng sang bytecode, sau đó, bytecode sẽ được dịch sang mã của ngôn ngữ máy tương thích trước khi thi hành.
Ví dụ: Trình biên dịch JIT được dùng bởi Smalltalk, Java, cũng như dùng bởi Ngôn ngữ trung gian thông dụng của Microsoft.NET.

Các đặc tính khác

Đặc biệt, một trình biên dịch có thể có thêm các chức năng sau đây:

  • Trình biên dịch mã liên kết là loại trình biên dịch cho phép thay thế các dòng ký tự trong (mã) nguồn bằng các khối mã nhị phân sẵn có. Các khối mã nhị phân này có thể có nhiều cấp độ khác nhau.
Ví dụ: các trình biên dịch trong hầu hết các kiến trúc của FORTH. Trong thực tế, một vài trình biên dịch FORTH có thể dịch các chương trình mà không cần đến hệ điều hành.
  • Trình biên dịch tăng tiến. Trong trình biên dịch tăng tiến, các hàm riêng lẻ có thể được dịch trong thời gian thi hành (runtime) mà các hàm này cũng bao gồm các chức năng thông dịch.
Ví dụ: Kiến trúc dịch tăng tiến xuất hiện từ 1962 và vẫn còn được sử dụng trong các hệ thống Lisp.
  • Trình biên dịch đa năng là trình biên dịch có thể được điều chỉnh để tạo ra mã cho các kiến trúc CPU khác nhau một cách tương đối dễ dàng. Mã đối tượng làm ra bởi các trình biên dịch này thường có chất lượng kém hơn là các mã được tạo ra từ các trình biên dịch chỉ chuyên dùng cho đúng loại CPU. Trình biên dịch đa năng thường cũng là trình biên dịch chéo bản.
Ví dụ: GCC là một loại trình biên dịch đa năng miễn phí rất phổ biến.
  • Trình biên dịch song song hóa là loại trình biên dịch có khả năng chuyển đổi một chương trình vào được viết theo kiểu liên tục sang một dạng thuận tiện trên kiến trúc của máy tính song song.